import { getToken, setToken, removeToken } from '@/utils/auth';
import { login } from '@/api/login';
import { resetRouter } from '@/router'
// 状态
const state = {
  token: getToken() // 设置token为共享状态 初始化vuex的时候 就先从缓存中读取
};
const mutations = {
  setToken(state, token) {
    state.token = token; // 将数据设置给vuex
    // 同步给缓存
    setToken(token);
  },
  removeToken(state) {
    state.token = null; // 将vuex的数据置空
    removeToken(); // 同步到缓存
  }
};
// 执行异步
const actions = {
  // 定义login action  也需要参数 调用action时 传递过来的参数
  async login(context, data) {
    const result = await login(data);
    // 实际上就是一个promise  result就是执行的结果
    // axios默认给数据加了一层data
    if (result.data.token) {
      // 表示登录接口调用成功 也就是意味着你的用户名和密码是正确的
      // 现在有用户token
      // actions 修改state 必须通过mutations
      context.commit('setToken', result.data.token);
    }
  },
  // 登出的方法
  logout(context) {
    // 删除token
    context.commit('removeToken')
    // 重置路由
    resetRouter()
  }
};
export default {
  namespaced: true,
  state,
  mutations,
  actions
};
